package Hadoop;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;

import java.io.IOException;
import java.net.URI;
/**
 * @author Esther
 * @date 2022-3-12 20:53
 */
public class HadoopUtil {
     String url ="hdfs://192.168.111.11:9000/";
    //  上传
    public  String hadoopUpload(String srcPath ,String destPath) throws IOException{
        String url_new = url;
        Configuration conf = new Configuration();
        FileSystem fileSystem = FileSystem.get(URI.create(url_new),conf);

        //案例3： 上传本地文件到hdfs

        // 本地的 文件
        Path srcLoc =new Path(srcPath);
        // hdfs 的路径
        Path destLoc = new Path(destPath);
        // 使用 hadoop 的 copyFromLocalFile
        fileSystem.copyFromLocalFile(srcLoc,destLoc);

        return "上传成功";
    }
     // 读文件
     public String hadoopRead(String filePath)throws IOException {

        // 用api的形式 读取下我们刚才写的文件
         String reaUrl = url+ filePath;
         // 加载hdfs 的配置
         Configuration conf = new Configuration();
         // 建立hdfs连接
         FileSystem fileSystem = FileSystem.get(URI.create(reaUrl),conf);  //URI.create(reaUrl),conf)
         // 打开url路径的文件
         FSDataInputStream fsDataInputStream = fileSystem.open(new Path(reaUrl));
         // 输出 文件内容，并关闭输入流
         // IOUtils.copyBytes(fsDataInputStream, System.out,4096,false);
         System.out.println( fsDataInputStream);

        //  FileStatus stat = fs.getFileStatus(path);
//         byte[] buffer = new byte[Integer.parseInt(String.valueOf(fsDataInputStream))];
//           fsDataInputStream.readFully(0, buffer);

         return "读取成功";
     }

    // 下载
    public String hadoopDownload(String srcPath ,String destPath)throws IOException {
        // 用api的形式 读取下我们刚才写的文件
        String url_new = url;
        Configuration conf = new Configuration();
        FileSystem fileSystem = FileSystem.get(URI.create(url_new),conf);
        // 建立hdfs连接
        // 本地的 文件
        Path srcLoc =new Path(srcPath);
        // hdfs 的路径
        Path destLoc = new Path(destPath);
        fileSystem.copyToLocalFile(false, srcLoc,destLoc,true);

        return "下载成功";
    }


}
